import request from "@/utils/request";

/**
 * 游戏分类
 */
export interface GameCategory {
  /** 分类ID */
  id: number;
  /** 分类名称 */
  name: string;
  /** 分类代码 */
  code: string;
  /** 分类图标 */
  icon?: string;
}

/**
 * 游戏标签
 */
export interface GameTag {
  /** 标签ID */
  id: number;
  /** 标签名称 */
  name: string;
}

/**
 * 游戏截图
 */
export interface GameScreenshot {
  /** 截图ID */
  id: number;
  /** 游戏ID */
  gameId: number;
  /** 图片URL */
  imageUrl: string;
  /** 截图描述 */
  description?: string;
}

/**
 * 游戏信息
 */
export interface GameInfo {
  /** 游戏ID */
  id: number;
  /** 游戏名称 */
  name: string;
  /** 游戏描述 */
  description: string;
  /** 封面图片 */
  coverImage: string;
  /** Banner图片 */
  bannerImage?: string;
  /** 游戏分类 */
  category: string;
  /** 游戏分类信息 */
  categoryInfo?: GameCategory;
  /** 游戏标签列表 */
  tags?: GameTag[];
  /** 游戏开发商 */
  developer: string;
  /** 游戏发行商 */
  publisher: string;
  /** 发布日期 */
  releaseDate: string;
  /** 游戏价格 */
  price: number;
  /** 折扣价格 */
  discountPrice?: number;
  /** 折扣开始时间 */
  discountStart?: string;
  /** 折扣结束时间 */
  discountEnd?: string;
  /** 评分(1-5) */
  rating: number;
  /** 评分人数 */
  ratingCount: number;
  /** 下载次数 */
  downloadCount: number;
  /** 游戏大小 */
  size: string;
  /** 游戏版本 */
  version: string;
  /** 最低年龄要求 */
  minAge: number;
  /** 游戏状态(0-下架，1-上架) */
  status: number;
  /** 是否推荐(0-否，1-是) */
  featured: number;
  /** 是否热门(0-否，1-是) */
  hot: number;
  /** 是否新品(0-否，1-是) */
  newGame: number;
  /** 游戏截图列表 */
  screenshots?: GameScreenshot[];
  /** 创建时间 */
  createTime?: string;
  /** 更新时间 */
  updateTime?: string;
}

/**
 * 游戏查询参数
 */
export interface GameQuery {
  /** 页码 */
  pageNum?: number;
  /** 每页条数 */
  pageSize?: number;
  /** 关键词 */
  keywords?: string;
  /** 分类ID */
  categoryId?: number;
  /** 标签ID */
  tagId?: number;
  /** 是否推荐 */
  featured?: number;
  /** 是否热门 */
  hot?: number;
  /** 是否新品 */
  newGame?: number;
  /** 最低评分 */
  minRating?: number;
}

/**
 * 获取游戏分页列表
 * 
 * @param params 查询参数
 * @returns 游戏分页数据
 */
export function getGamePage(params: GameQuery) {
  return request({
    url: '/api/v1/games/page',
    method: 'get',
    params
  });
}

/**
 * 获取游戏详情
 * 
 * @param id 游戏ID
 * @returns 游戏详情
 */
export function getGameDetail(id: number) {
  return request<any, GameInfo>({
    url: `/api/v1/games/${id}`,
    method: 'get'
  });
}

/**
 * 获取推荐游戏列表
 * 
 * @param limit 获取数量
 * @returns 推荐游戏列表
 */
export function getFeaturedGames(limit: number = 6) {
  return request<any, GameInfo[]>({
    url: '/api/v1/games/featured',
    method: 'get',
    params: { limit }
  });
}

/**
 * 获取热门游戏列表
 * 
 * @param limit 获取数量
 * @returns 热门游戏列表
 */
export function getHotGames(limit: number = 6) {
  return request<any, GameInfo[]>({
    url: '/api/v1/games/hot',
    method: 'get',
    params: { limit }
  });
}

/**
 * 获取新品游戏列表
 * 
 * @param limit 获取数量
 * @returns 新品游戏列表
 */
export function getNewGames(limit: number = 6) {
  return request<any, GameInfo[]>({
    url: '/api/v1/games/new',
    method: 'get',
    params: { limit }
  });
}

/**
 * 获取分类游戏列表
 * 
 * @param categoryId 分类ID
 * @param limit 获取数量
 * @returns 分类游戏列表
 */
export function getGamesByCategory(categoryId: number, limit: number = 10) {
  return request<any, GameInfo[]>({
    url: `/api/v1/games/category/${categoryId}`,
    method: 'get',
    params: { limit }
  });
}

/**
 * 增加游戏下载次数
 * 
 * @param id 游戏ID
 * @returns 是否成功
 */
export function incrementDownloadCount(id: number) {
  return request<any, boolean>({
    url: `/api/v1/games/${id}/download`,
    method: 'put'
  });
}

/**
 * 更新游戏评分
 * 
 * @param id 游戏ID
 * @param rating 评分
 * @returns 是否成功
 */
export function updateRating(id: number, rating: number) {
  return request<any, boolean>({
    url: `/api/v1/games/${id}/rating`,
    method: 'put',
    params: { rating }
  });
} 